package com.zy.design.visit;

import com.google.common.collect.Lists;
import com.zy.design.visit.file.PDFFile;
import com.zy.design.visit.file.ResourceFile;
import com.zy.design.visit.file.WordFile;
import com.zy.design.visit.operation.Compressor;
import com.zy.design.visit.operation.Extractor;
import com.zy.design.visit.operation.Extractor2;

import java.util.List;

/**
 * @author zhaoyi
 * @date 2021/11/9 13:47
 */
public class AppMain {

    public static void main(String[] args) {
        List<ResourceFile> fs =  getFile();
        Extractor2 ex = new Extractor2();
        for (ResourceFile f : fs) {
            //提取文字
            f.accept(ex);
        }

        //压缩
        Compressor cs = new Compressor();
        fs.get(0).accept(cs);


        /**
         * 1 当功能太多时候,一个类会变得臃肿.访问者模式允许一个或者多个操作应用到一组对象上，设计意图是解耦操作和对象本身，保持类职责单一、满足开闭原则以及应对代码的复杂性。
         * 2 分离时:
         * 	方法重载对应大多数面向对象的语音是中是静态绑定的.(调用类的哪个重载函数，是在编译期间，由参数的声明类型决定的，而非运行时，根据参数的实际类型决定的)
         * 	多态是一种动态绑定.
         */
       /* Extractor extractor = new Extractor();
        for (ResourceFile f : fs) {
            //编译不过的
            extractor.extract2txt(f);
        }*/


    }

    private static List<ResourceFile> getFile() {
        List<ResourceFile> ls = Lists.newArrayList();
        ls.add(new PDFFile("指南.pdf"));
        ls.add(new PDFFile("演示.ppt"));
        ls.add(new WordFile("文档.doc"));
        return ls;
    }

}
